package pe.com.bbva.ge.vista.vaadin.ui;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import pe.com.bbva.ge.domain.configuracion.Lista;
import pe.com.bbva.ge.domain.configuracion.Parametro;
import pe.com.bbva.ge.domain.configuracion.Valor;
import pe.com.bbva.ge.domain.seguridad.Membresia;
import pe.com.bbva.ge.domain.seguridad.Permiso;
import pe.com.bbva.ge.domain.seguridad.Rol;
import pe.com.bbva.ge.negocio.ConfiguracionNegocio;
//import pe.com.bbva.reniec.utileria.BeanValidar;
import pe.com.bbva.ge.utileria.Constante;

import com.cdainfo.vaadin.TablaFiltro;
import com.cdainfo.vaadin.container.CDAIndexedContainer;
import com.vaadin.annotations.AutoGenerated;
import com.vaadin.data.Item;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.data.util.BeanItemContainer;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.TextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;

public class RolesYMembresiasUI extends VentanaUI implements TextChangeListener, ClickListener{


	@AutoGenerated
	private VerticalLayout mainLayout;

	@AutoGenerated
	private HorizontalLayout pnlPestanias;

	@AutoGenerated
	private TabSheet tabSheet;

	@AutoGenerated
	private MembresiasUI panelConfigRolesMembresia;

	@AutoGenerated
	private HorizontalLayout pnlRolContenido;

	@AutoGenerated
	private VerticalLayout pnlGrabarRol;

	@AutoGenerated
	private HorizontalLayout pnlRolFila5;

	@AutoGenerated
	private Button btnEliminarRol;

	@AutoGenerated
	private Button btnGrabarRol;

	@AutoGenerated
	private HorizontalLayout pnlRolFila4;

	@AutoGenerated
	private ComboBox cmbEstadoRol;

	@AutoGenerated
	private ComboBox cmbPadreRol;

	@AutoGenerated
	private HorizontalLayout pnlRolFila3;

	@AutoGenerated
	private TextArea txtADescripcionRol;

	@AutoGenerated
	private HorizontalLayout pnlRolFila2;

	@AutoGenerated
	private TextField txtNombreRol;

	@AutoGenerated
	private HorizontalLayout pnlRolFila1;

	@AutoGenerated
	private TextField txtCodigoRol;

	@AutoGenerated
	private TextField txtIdRol;

	@AutoGenerated
	private Label lblGrabarRol;

	@AutoGenerated
	private VerticalLayout pnlRoles;

	@AutoGenerated
	private TablaFiltro tblRoles;

	@AutoGenerated
	private HorizontalLayout horizontalLayout_1;

	@AutoGenerated
	private Button btnLimpiar;

	@AutoGenerated
	private Button btnBuscar;

	@AutoGenerated
	private Label lblRoles;

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/*- VaadinEditorProperties={"grid":"RegularGrid,20","showGrid":true,"snapToGrid":true,"snapToObject":true,"movingGuides":false,"snappingDistance":10} */



	



	

	private CDAIndexedContainer container;

	@Autowired
	private ConfiguracionNegocio genericoNegocio;
	
	private boolean flagNuevoRol;

	public RolesYMembresiasUI() {
		buildMainLayout();
		setCompositionRoot(mainLayout);
		debugId();
	}
	
	public void postConstruccion() {
		
		inicializarComponentes();
		llenarCombos();
		habilitarEventosTablas();
		habilitarEventosFiltros();
		habilitarEventosBotones();
	}
	
	private void inicializarComponentes(){
		txtIdRol.setValue("");
		txtADescripcionRol.setNullRepresentation("");
		habilitarEdicion("rol",false);
		pnlPestanias.removeAllComponents();
		
		btnBuscar.addListener((ClickListener)this);
		btnLimpiar.addListener((ClickListener)this);
	}
	private void llenarCombos(){
		List<Rol> roles = genericoNegocio.buscarRoles(null);
		BeanItemContainer<Rol> bicRoles = new BeanItemContainer<Rol>(Rol.class,  roles);
		cargarRoles(roles, true);
		
		List<Valor> valores = genericoNegocio.obtenerValores(Constante.LISTA.CODIGO.REGISTRO_ESTADO);
		BeanItemContainer<Valor> bicValores = new BeanItemContainer<Valor>(Valor.class,  valores);
		
		
		cmbEstadoRol.setInputPrompt("Estado");
		cmbEstadoRol.setContainerDataSource(bicValores);
		cmbEstadoRol.setItemCaptionPropertyId("nombre");
		
		valores = genericoNegocio.obtenerValores(Constante.LISTA.CODIGO.MEMBRESIA_TIPO);
		bicValores = new BeanItemContainer<Valor>(Valor.class,  valores);
		
		
		cmbPadreRol.setInputPrompt("Padre");
		cmbPadreRol.setContainerDataSource(bicRoles);
		cmbPadreRol.setItemCaptionPropertyId("nombre");
	}
	
	private void habilitarEventosTablas(){
		tblRoles.setSelectable(true);
		tblRoles.setImmediate(true);
		tblRoles.setNullSelectionAllowed(true);
		tblRoles.setNullSelectionItemId(null);
		
		tblRoles.addListener(new ValueChangeListener() {

			private static final long serialVersionUID = 8777353572610365687L;

			@Override
			public void valueChange(ValueChangeEvent event) {
				boolean esModoNuevo = tblRoles.getValue() == null;
				if(esModoNuevo){
					tblRoles.setValue(null);
					habilitarEdicion("rol",!esModoNuevo);
					txtIdRol.setValue("");
					limpiar("rol");
					pnlPestanias.removeAllComponents();
				}
				else
				{
					pnlPestanias.addComponent(tabSheet);
					
					Item item = tblRoles.getItem(tblRoles.getValue());
					txtIdRol.setValue(item.getItemProperty("id").getValue());
					txtCodigoRol.setValue(item.getItemProperty("codigo").getValue());
					txtNombreRol.setValue(item.getItemProperty("nombre").getValue());
					txtADescripcionRol.setValue(item.getItemProperty("descripcion").getValue());
					Rol padre = null;
					if(item.getItemProperty("padre.id").getValue()!=null){
						padre = new Rol();
						padre.setId((Long)item.getItemProperty("padre.id").getValue());
						padre.setCodigo((String)item.getItemProperty("padre.codigo").getValue());
					}
					cmbPadreRol.select(padre);
					Valor estado = new Valor();
					estado.setId((Long)item.getItemProperty("estado.id").getValue());
					estado.setCodigo((String)item.getItemProperty("estado.codigo").getValue());
					estado.setLista(new Lista());
					estado.getLista().setCodigo((String)item.getItemProperty("estado.lista.codigo").getValue());
					cmbEstadoRol.select(estado);
					
					habilitarEdicion("rol",!esModoNuevo);
					
					Rol rol = new Rol();
					rol.setId((Long)item.getItemProperty("id").getValue());
					rol.setCodigo((String)item.getItemProperty("codigo").getValue());
					
					habilitarEdicion("membresia",false);
					Rol rolSeleccionado = genericoNegocio.obtener((Long)item.getItemProperty("id").getValue(), Rol.class);
					panelConfigRolesMembresia.setRolSeleccionado(rolSeleccionado);
				}
			}
		});
		
	}
	
	private void habilitarEventosFiltros(){
		/*txtFiltroIdRol.setImmediate(true);
		txtFiltroCodigoRol.setImmediate(true);
		txtFiltroNombreRol.setImmediate(true);
		txtFiltroPadreRol.setImmediate(true);
		txtFiltroEstatus.setImmediate(true);
		
		txtFiltroIdRol.addListener((TextChangeListener)this);
		txtFiltroCodigoRol.addListener((TextChangeListener)this);
		txtFiltroNombreRol.addListener((TextChangeListener)this);
		txtFiltroPadreRol.addListener((TextChangeListener)this);
		txtFiltroEstatus.addListener((TextChangeListener)this);*/
	}
	
	private void habilitarEventosBotones(){
		btnGrabarRol.addListener((ClickListener)this);
		btnEliminarRol.addListener((ClickListener)this);
	}
	
	private void habilitarEdicion(String nombre, boolean flag)
	{
		if(nombre.equals("rol")){
			flagNuevoRol = !flag;
			btnEliminarRol.setVisible(flag);
			if(flag)
			{
				btnGrabarRol.setCaption("Actualizar");
			}
			else
			{
				btnGrabarRol.setCaption("Crear");
			}
		}
	}
	
	private void limpiar(String nombre)
	{
		if(nombre.equals("rol")){
			txtIdRol.setValue("");
			txtCodigoRol.setValue("");
			txtNombreRol.setValue("");
			txtADescripcionRol.setValue("");
			cmbPadreRol.select(null);
			cmbEstadoRol.select(null);
		}
	}
	
	private void cargarRoles(List<Rol> roles, boolean flagLimpiar)
	{
		container = new CDAIndexedContainer();
		container.addContainerProperty("id", Long.class, null, "ID", CDAIndexedContainer.TipoComponente.TEXT, true, 37);
		container.addContainerProperty("codigo", String.class, null, "Código", CDAIndexedContainer.TipoComponente.TEXT, true, 87);
		container.addContainerProperty("nombre", String.class, null, "Nombre", CDAIndexedContainer.TipoComponente.TEXT, true, 146);
		container.addContainerProperty("descripcion", String.class, null);
		//container.addContainerProperty("padre.id", Long.class, null, "padre.id", CDAIndexedContainer.TipoComponente.TEXT, true, 100);
		//container.addContainerProperty("padre.nombre", String.class, null, "padre.nombre", CDAIndexedContainer.TipoComponente.TEXT, true, 100);
		container.addContainerProperty("estado.id", Long.class, null);
		container.addContainerProperty("estado.nombre", String.class, null, "Estado", CDAIndexedContainer.TipoComponente.TEXT, true, 100);
		//container.addContainerProperty("padre.codigo", String.class, null, "padre.codigo", CDAIndexedContainer.TipoComponente.TEXT, true, 100);
		container.addContainerProperty("estado.codigo", String.class, null);
		container.addContainerProperty("estado.lista.codigo", String.class, null);
		
		int con=1;
		for (Rol rol : roles) {
			Item item = container.addItem(con++);
            item.getItemProperty("id").setValue(rol.getId());
            item.getItemProperty("codigo").setValue(rol.getCodigo());
            item.getItemProperty("nombre").setValue(rol.getNombre());
            item.getItemProperty("descripcion").setValue(rol.getDescripcion());
//            item.getItemProperty("padre.id").setValue(rol.getPadre() == null ? null : rol.getPadre().getId());
//            item.getItemProperty("padre.nombre").setValue(rol.getPadre() == null ? null : rol.getPadre().getNombre());
            item.getItemProperty("estado.id").setValue(rol.getEstado() == null ? null : rol.getEstado().getId());
            item.getItemProperty("estado.nombre").setValue(rol.getEstado() == null ? null : rol.getEstado().getNombre());
//            item.getItemProperty("padre.codigo").setValue(rol.getPadre() == null ? null : rol.getPadre().getCodigo());
            item.getItemProperty("estado.codigo").setValue(rol.getEstado() == null ? null : rol.getEstado().getCodigo());
            item.getItemProperty("estado.lista.codigo").setValue(rol.getEstado() == null && rol.getEstado().getLista() == null ? null : rol.getEstado().getLista().getCodigo());
		}
		
		tblRoles.setContainerDataSource(container);
		//tblRoles.setVisibleColumns(new Object[]{"id", "codigo", "nombre", "padre.nombre", "estado.nombre"});
		
		if(flagLimpiar)
		{
			/*txtFiltroIdRol.setValue("");
			txtFiltroCodigoRol.setValue("");
			txtFiltroNombreRol.setValue("");
			txtFiltroPadreRol.setValue("");*/
		}
		
	}
	
	
	
	@Override
	public void textChange(TextChangeEvent event) {
		Rol rol = null;
		/*if(event.getSource().equals(txtFiltroIdRol))		{
			rol = new Rol();
			if(StringUtils.isNumeric(event.getText())){
				if(StringUtils.isNotBlank(event.getText()))
				{
					rol.setId(Long.parseLong(event.getText()));
				}
				if(StringUtils.isNotBlank(txtFiltroCodigoRol.getValue().toString()))
				{
					rol.setCodigo(txtFiltroCodigoRol.getValue().toString());
				}
				if(StringUtils.isNotBlank(txtFiltroNombreRol.getValue().toString()))
				{
					rol.setNombre(txtFiltroNombreRol.getValue().toString());
				}
				if(StringUtils.isNotBlank(txtFiltroPadreRol.getValue().toString()))
				{
					Rol padre = new Rol();
					padre.setNombre(txtFiltroPadreRol.getValue().toString());
//					rol.setPadre(padre);
				}
				if(StringUtils.isNotBlank(txtFiltroEstatus.getValue().toString())){
					Valor valor = new Valor();
					valor.setNombre(txtFiltroEstatus.getValue().toString());
					rol.setEstado(valor);
				}
			}else{
				txtFiltroIdRol.setValue(txtFiltroIdRol.getValue());
			}
		}
		if(event.getSource().equals(txtFiltroCodigoRol))
		{
			rol = new Rol();
			if(StringUtils.isNotBlank(txtFiltroIdRol.getValue().toString()))
			{
				rol.setId(Long.parseLong(txtFiltroIdRol.getValue().toString()));
			}
			if(StringUtils.isNotBlank(event.getText()))
			{
				rol.setCodigo(event.getText());
			}
			if(StringUtils.isNotBlank(txtFiltroNombreRol.getValue().toString()))
			{
				rol.setNombre(txtFiltroNombreRol.getValue().toString());
			}
			if(StringUtils.isNotBlank(txtFiltroPadreRol.getValue().toString()))
			{
				Rol padre = new Rol();
				padre.setNombre(txtFiltroPadreRol.getValue().toString());
//				rol.setPadre(padre);
			}
			if(StringUtils.isNotBlank(txtFiltroEstatus.getValue().toString())){
				Valor valor = new Valor();
				valor.setNombre(txtFiltroEstatus.getValue().toString());
				rol.setEstado(valor);
			}
		}
		if(event.getSource().equals(txtFiltroNombreRol))
		{
			rol = new Rol();
			if(StringUtils.isNotBlank(txtFiltroIdRol.getValue().toString()))
			{
				rol.setId(Long.parseLong(txtFiltroIdRol.getValue().toString()));
			}
			if(StringUtils.isNotBlank(txtFiltroCodigoRol.getValue().toString()))
			{
				rol.setCodigo(txtFiltroCodigoRol.getValue().toString());
			}
			if(StringUtils.isNotBlank(event.getText()))
			{
				rol.setNombre(event.getText());
			}
			if(StringUtils.isNotBlank(txtFiltroPadreRol.getValue().toString()))
			{
				Rol padre = new Rol();
				padre.setNombre(txtFiltroPadreRol.getValue().toString());
//				rol.setPadre(padre);
			}
			if(StringUtils.isNotBlank(txtFiltroEstatus.getValue().toString())){
				Valor valor = new Valor();
				valor.setNombre(txtFiltroEstatus.getValue().toString());
				rol.setEstado(valor);
			}
		}
		if(event.getSource().equals(txtFiltroPadreRol))
		{
			rol = new Rol();
			if(StringUtils.isNotBlank(txtFiltroIdRol.getValue().toString()))
			{
				rol.setId(Long.parseLong(txtFiltroIdRol.getValue().toString()));
			}
			if(StringUtils.isNotBlank(txtFiltroCodigoRol.getValue().toString()))
			{
				rol.setCodigo(txtFiltroCodigoRol.getValue().toString());
			}
			if(StringUtils.isNotBlank(txtFiltroNombreRol.getValue().toString()))
			{
				rol.setNombre(txtFiltroNombreRol.getValue().toString());
			}
			if(StringUtils.isNotBlank(event.getText()))
			{
				Rol padre = new Rol();
				padre.setNombre(event.getText());
//				rol.setPadre(padre);
			}
			if(StringUtils.isNotBlank(txtFiltroEstatus.getValue().toString())){
				Valor valor = new Valor();
				valor.setNombre(txtFiltroEstatus.getValue().toString());
				rol.setEstado(valor);
			}
		}
		
		if(event.getSource().equals(txtFiltroEstatus))
		{
			rol = new Rol();
			if(StringUtils.isNotBlank(txtFiltroIdRol.getValue().toString()))
			{
				rol.setId(Long.parseLong(txtFiltroIdRol.getValue().toString()));
			}
			if(StringUtils.isNotBlank(txtFiltroCodigoRol.getValue().toString()))
			{
				rol.setCodigo(txtFiltroCodigoRol.getValue().toString());
			}
			if(StringUtils.isNotBlank(txtFiltroNombreRol.getValue().toString()))
			{
				rol.setNombre(txtFiltroNombreRol.getValue().toString());
			}
			if(StringUtils.isNotBlank(txtFiltroPadreRol.getValue().toString()))
			{
				Rol padre = new Rol();
				padre.setNombre(txtFiltroPadreRol.getValue().toString());
//				rol.setPadre(padre);
			}
			if(StringUtils.isNotBlank(event.getText())){
				Valor valor = new Valor();
				valor.setNombre(event.getText());
				rol.setEstado(valor);
			}
			
			
		}
		
		if(rol!=null){
			List<Rol> roles = genericoNegocio.buscarRoles(rol);
			cargarRoles(roles, false);
			limpiar("rol");
			habilitarEdicion("rol",false);
		}*/
		
	}

	@Override
	public void buttonClick(ClickEvent event) {
		
		if(event.getButton().equals(btnGrabarRol))
		{
			buttonClickGrabarRol();
		}
		if(event.getButton().equals(btnEliminarRol))
		{
			buttonClickEliminarRol();
		}
		
		if(event.getButton().equals(btnBuscar))
		{
			buscarDatos();
		}
		
		if(event.getButton().equals(btnLimpiar))
		{
			//FIXME JARLEY tblRoles.limpiarFiltros();
			buscarDatos();
		}
	}
	
	private void buscarDatos()
	{
		//FIXME JARLEY 
		/*List<TablaFiltro.Filtro> listaFiltros = tblRoles.getListaFiltros();
		Rol rolFiltro = new Rol();
		
		for(TablaFiltro.Filtro filtro : listaFiltros)
		{
			if(filtro.getIdColumna().equals("id") && filtro.getValor().trim().length() > 0)
			{
				rolFiltro.setId(Long.valueOf(filtro.getValor()));
			}
			
			if(filtro.getIdColumna().equals("codigo") && filtro.getValor().trim().length() > 0)
			{
				rolFiltro.setCodigo(filtro.getValor());
			}
			
			if(filtro.getIdColumna().equals("nombre") && filtro.getValor().trim().length() > 0)
			{
				rolFiltro.setCodigo(filtro.getValor());
			}
			
			if(filtro.getIdColumna().equals("estado.nombre") && filtro.getValor().trim().length() > 0)
			{
				rolFiltro.setCodigo(filtro.getValor());
			}
		}
		
		container.removeAllItems();
		
		int con=1;
		for (Rol rol : genericoNegocio.buscarRoles(rolFiltro)) {
			Item item = container.addItem(con++);
            item.getItemProperty("id").setValue(rol.getId());
            item.getItemProperty("codigo").setValue(rol.getCodigo());
            item.getItemProperty("nombre").setValue(rol.getNombre());
            item.getItemProperty("descripcion").setValue(rol.getDescripcion());
//            item.getItemProperty("padre.id").setValue(rol.getPadre() == null ? null : rol.getPadre().getId());
//            item.getItemProperty("padre.nombre").setValue(rol.getPadre() == null ? null : rol.getPadre().getNombre());
            item.getItemProperty("estado.id").setValue(rol.getEstado() == null ? null : rol.getEstado().getId());
            item.getItemProperty("estado.nombre").setValue(rol.getEstado() == null ? null : rol.getEstado().getNombre());
//            item.getItemProperty("padre.codigo").setValue(rol.getPadre() == null ? null : rol.getPadre().getCodigo());
            item.getItemProperty("estado.codigo").setValue(rol.getEstado() == null ? null : rol.getEstado().getCodigo());
            item.getItemProperty("estado.lista.codigo").setValue(rol.getEstado() == null && rol.getEstado().getLista() == null ? null : rol.getEstado().getLista().getCodigo());
		}*/
	}
	
	
	
	private void buttonClickGrabarRol(){

		Rol rol = new Rol();
		rol.setCodigo((String)txtCodigoRol.getValue());
		rol.setNombre((String)txtNombreRol.getValue());
		rol.setDescripcion((String)txtADescripcionRol.getValue());
//		rol.setPadre((Rol)cmbPadreRol.getValue());
		rol.setEstado((Valor)cmbEstadoRol.getValue());

		if(!flagNuevoRol){
			rol.setId(Long.parseLong(txtIdRol.getValue().toString()));
		}
//		ReniecUtil.validar(getWindow(), rol, 
//				new BeanValidar[]{new BeanValidar("codigo", new Object[]{"Código"}, txtCodigoRol),
//					new BeanValidar("nombre", new Object[]{"Nombre Rol"}, txtNombreRol),
//					new BeanValidar("estado", new Object[]{"Estado"}, cmbEstadoRol)});
		genericoNegocio.crear(rol);
		refrescar("rol");
	
	}
	
	private void buttonClickEliminarRol(){

		Rol rol = new Rol();
		rol.setCodigo((String)txtCodigoRol.getValue());
		rol.setNombre((String)txtNombreRol.getValue());
		rol.setDescripcion((String)txtADescripcionRol.getValue());
//		rol.setPadre((Rol)cmbPadreRol.getValue());
		rol.setEstado((Valor)cmbEstadoRol.getValue());
		
		 rol = genericoNegocio.obtener(Long.parseLong(txtIdRol.getValue().toString()), Rol.class);
		
		if(!verificarRelaciones(rol)){
			genericoNegocio.eliminar(rol);
			refrescar("rol");
		}
		
	
	}	
	
	private boolean verificarRelaciones(Rol rol){
		boolean blnResultado=false;
		List<Rol> rolesHijo =  genericoNegocio.obtenerRolesHijo(rol);
		if(rolesHijo.size() > 0){
			return  true;
		}
		List<Permiso> permisos =  genericoNegocio.obtenerPermisosXRol(rol.getId(), true);
		if(permisos.size() > 0){
			return  true;
		}
		
		Membresia membresia = new Membresia();
		membresia.setRol(rol);
		
		List<Membresia> membresias =  genericoNegocio.buscarMembresias(membresia);
		if(membresias.size() > 0){
			return  true;
		}
		
		
		return blnResultado;
	}
	
	private void refrescar(String nombre)
	{
		habilitarEdicion(nombre,false);
		limpiar(nombre);
		if(nombre.equals("rol")){
			List<Rol> roles = genericoNegocio.buscarRoles(null);
			cargarRoles(roles, true);
			BeanItemContainer<Rol> bicRoles = new BeanItemContainer<Rol>(Rol.class,  roles);
			cmbPadreRol.setInputPrompt("Padre");
			cmbPadreRol.setContainerDataSource(bicRoles);
			cmbPadreRol.setItemCaptionPropertyId("nombre");
		}
	}
	
	private void debugId(){
		btnEliminarRol.setDebugId("btnEliminarRol");
		btnGrabarRol.setDebugId("btnGrabarRol");
		cmbEstadoRol.setDebugId("cmbEstadoRol");
		cmbPadreRol.setDebugId("cmbPadreRol");
		lblGrabarRol.setDebugId("lblGrabarRol");
		txtIdRol.setDebugId("lblIdRol");
		lblRoles.setDebugId("lblRoles");
		mainLayout.setDebugId("mainLayout");
		panelConfigRolesMembresia.setDebugId("panelConfigRolesMembresia");
		//pnlFiltroRol.setDebugId("pnlFiltroRol");
		pnlGrabarRol.setDebugId("pnlGrabarRol");
		pnlPestanias.setDebugId("pnlPestanias");
		pnlRolContenido.setDebugId("pnlRolContenido");
		pnlRoles.setDebugId("pnlRoles");
		pnlRolFila1.setDebugId("pnlRolFila1");
		pnlRolFila2.setDebugId("pnlRolFila2");
		pnlRolFila3.setDebugId("pnlRolFila3");
		pnlRolFila4.setDebugId("pnlRolFila4");
		pnlRolFila5.setDebugId("pnlRolFila5");
		tabSheet.setDebugId("tabSheet");
		tblRoles.setDebugId("tblRoles");
		txtADescripcionRol.setDebugId("txtADescripcionRol");
		txtCodigoRol.setDebugId("txtCodigoRol");
		/*txtFiltroCodigoRol.setDebugId("txtFiltroCodigoRol");
		txtFiltroIdRol.setDebugId("txtFiltroIdRol");
		txtFiltroNombreRol.setDebugId("txtFiltroNombreRol");
		txtFiltroPadreRol.setDebugId("txtFiltroPadreRol");*/
		txtNombreRol.setDebugId("txtNombreRol");
	}
	
	@AutoGenerated
	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("100%");
		mainLayout.setHeight("100%");
		mainLayout.setMargin(false);
		mainLayout.setSpacing(true);
		
		// top-level component properties
		setWidth("100.0%");
		setHeight("100.0%");
		
		// pnlRolContenido
		pnlRolContenido = buildPnlRolContenido();
		mainLayout.addComponent(pnlRolContenido);
		
		// pnlPestanias
		pnlPestanias = buildPnlPestanias();
		mainLayout.addComponent(pnlPestanias);
		
		return mainLayout;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlRolContenido() {
		// common part: create layout
		pnlRolContenido = new HorizontalLayout();
		pnlRolContenido.setImmediate(false);
		pnlRolContenido.setWidth("950px");
		pnlRolContenido.setHeight("-1px");
		pnlRolContenido.setMargin(false);
		
		// pnlRoles
		pnlRoles = buildPnlRoles();
		pnlRolContenido.addComponent(pnlRoles);
		
		// pnlGrabarRol
		pnlGrabarRol = buildPnlGrabarRol();
		pnlRolContenido.addComponent(pnlGrabarRol);
		
		return pnlRolContenido;
	}

	@AutoGenerated
	private VerticalLayout buildPnlRoles() {
		// common part: create layout
		pnlRoles = new VerticalLayout();
		pnlRoles.setImmediate(false);
		pnlRoles.setWidth("580px");
		pnlRoles.setHeight("-1px");
		pnlRoles.setMargin(false);
		
		// lblRoles
		lblRoles = new Label();
		lblRoles.setImmediate(false);
		lblRoles.setWidth("-1px");
		lblRoles.setHeight("-1px");
		lblRoles.setValue("Roles");
		pnlRoles.addComponent(lblRoles);
		
		// horizontalLayout_1
		horizontalLayout_1 = buildHorizontalLayout_1();
		pnlRoles.addComponent(horizontalLayout_1);
		
		// tblRoles
		tblRoles = new TablaFiltro();
		tblRoles.setImmediate(false);
		tblRoles.setWidth("550px");
		tblRoles.setHeight("250px");
		pnlRoles.addComponent(tblRoles);
		
		return pnlRoles;
	}

	@AutoGenerated
	private HorizontalLayout buildHorizontalLayout_1() {
		// common part: create layout
		horizontalLayout_1 = new HorizontalLayout();
		horizontalLayout_1.setImmediate(false);
		horizontalLayout_1.setWidth("-1px");
		horizontalLayout_1.setHeight("-1px");
		horizontalLayout_1.setMargin(false);
		
		// btnBuscar
		btnBuscar = new Button();
		btnBuscar.setCaption("Buscar");
		btnBuscar.setImmediate(false);
		btnBuscar.setWidth("-1px");
		btnBuscar.setHeight("-1px");
		horizontalLayout_1.addComponent(btnBuscar);
		
		// btnLimpiar
		btnLimpiar = new Button();
		btnLimpiar.setCaption("Limpiar");
		btnLimpiar.setImmediate(false);
		btnLimpiar.setWidth("-1px");
		btnLimpiar.setHeight("-1px");
		horizontalLayout_1.addComponent(btnLimpiar);
		
		return horizontalLayout_1;
	}

	@AutoGenerated
	private VerticalLayout buildPnlGrabarRol() {
		// common part: create layout
		pnlGrabarRol = new VerticalLayout();
		pnlGrabarRol.setImmediate(false);
		pnlGrabarRol.setWidth("370px");
		pnlGrabarRol.setHeight("-1px");
		pnlGrabarRol.setMargin(false);
		pnlGrabarRol.setSpacing(true);
		
		// lblGrabarRol
		lblGrabarRol = new Label();
		lblGrabarRol.setImmediate(false);
		lblGrabarRol.setWidth("-1px");
		lblGrabarRol.setHeight("-1px");
		lblGrabarRol.setValue("Rol");
		pnlGrabarRol.addComponent(lblGrabarRol);
		
		// pnlRolFila1
		pnlRolFila1 = buildPnlRolFila1();
		pnlGrabarRol.addComponent(pnlRolFila1);
		
		// pnlRolFila2
		pnlRolFila2 = buildPnlRolFila2();
		pnlGrabarRol.addComponent(pnlRolFila2);
		
		// pnlRolFila3
		pnlRolFila3 = buildPnlRolFila3();
		pnlGrabarRol.addComponent(pnlRolFila3);
		
		// pnlRolFila4
		pnlRolFila4 = buildPnlRolFila4();
		pnlGrabarRol.addComponent(pnlRolFila4);
		
		// pnlRolFila5
		pnlRolFila5 = buildPnlRolFila5();
		pnlGrabarRol.addComponent(pnlRolFila5);
		
		return pnlGrabarRol;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlRolFila1() {
		// common part: create layout
		pnlRolFila1 = new HorizontalLayout();
		pnlRolFila1.setImmediate(false);
		pnlRolFila1.setWidth("-1px");
		pnlRolFila1.setHeight("-1px");
		pnlRolFila1.setMargin(false);
		pnlRolFila1.setSpacing(true);
		
		// txtIdRol
		txtIdRol = new TextField();
		txtIdRol.setEnabled(false);
		txtIdRol.setImmediate(false);
		txtIdRol.setWidth("40px");
		txtIdRol.setHeight("-1px");
		txtIdRol.setInputPrompt("Id");
		pnlRolFila1.addComponent(txtIdRol);
		
		// txtCodigoRol
		txtCodigoRol = new TextField();
		txtCodigoRol.setStyleName("fieldRequired");
		txtCodigoRol.setImmediate(false);
		txtCodigoRol.setWidth("200px");
		txtCodigoRol.setHeight("-1px");
		txtCodigoRol.setInputPrompt("Código");
		pnlRolFila1.addComponent(txtCodigoRol);
		
		return pnlRolFila1;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlRolFila2() {
		// common part: create layout
		pnlRolFila2 = new HorizontalLayout();
		pnlRolFila2.setImmediate(false);
		pnlRolFila2.setWidth("-1px");
		pnlRolFila2.setHeight("-1px");
		pnlRolFila2.setMargin(false);
		pnlRolFila2.setSpacing(true);
		
		// txtNombreRol
		txtNombreRol = new TextField();
		txtNombreRol.setStyleName("fieldRequired");
		txtNombreRol.setImmediate(false);
		txtNombreRol.setWidth("360px");
		txtNombreRol.setHeight("-1px");
		txtNombreRol.setInputPrompt("Nombre Rol");
		pnlRolFila2.addComponent(txtNombreRol);
		
		return pnlRolFila2;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlRolFila3() {
		// common part: create layout
		pnlRolFila3 = new HorizontalLayout();
		pnlRolFila3.setImmediate(false);
		pnlRolFila3.setWidth("-1px");
		pnlRolFila3.setHeight("-1px");
		pnlRolFila3.setMargin(false);
		pnlRolFila3.setSpacing(true);
		
		// txtADescripcionRol
		txtADescripcionRol = new TextArea();
		txtADescripcionRol.setImmediate(false);
		txtADescripcionRol.setWidth("360px");
		txtADescripcionRol.setHeight("60px");
		txtADescripcionRol.setInputPrompt("Descripción");
		pnlRolFila3.addComponent(txtADescripcionRol);
		
		return pnlRolFila3;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlRolFila4() {
		// common part: create layout
		pnlRolFila4 = new HorizontalLayout();
		pnlRolFila4.setImmediate(false);
		pnlRolFila4.setWidth("-1px");
		pnlRolFila4.setHeight("-1px");
		pnlRolFila4.setMargin(false);
		pnlRolFila4.setSpacing(true);
		
		// cmbPadreRol
		cmbPadreRol = new ComboBox();
		cmbPadreRol.setImmediate(false);
		cmbPadreRol.setWidth("180px");
		cmbPadreRol.setHeight("-1px");
		pnlRolFila4.addComponent(cmbPadreRol);
		
		// cmbEstadoRol
		cmbEstadoRol = new ComboBox();
		cmbEstadoRol.setImmediate(false);
		cmbEstadoRol.setWidth("180px");
		cmbEstadoRol.setHeight("-1px");
		pnlRolFila4.addComponent(cmbEstadoRol);
		
		return pnlRolFila4;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlRolFila5() {
		// common part: create layout
		pnlRolFila5 = new HorizontalLayout();
		pnlRolFila5.setImmediate(false);
		pnlRolFila5.setWidth("370px");
		pnlRolFila5.setHeight("-1px");
		pnlRolFila5.setMargin(false);
		pnlRolFila5.setSpacing(true);
		
		// btnGrabarRol
		btnGrabarRol = new Button();
		btnGrabarRol.setCaption("Actualizar");
		btnGrabarRol.setImmediate(true);
		btnGrabarRol.setWidth("-1px");
		btnGrabarRol.setHeight("-1px");
		pnlRolFila5.addComponent(btnGrabarRol);
		pnlRolFila5.setComponentAlignment(btnGrabarRol, new Alignment(20));
		
		// btnEliminarRol
		btnEliminarRol = new Button();
		btnEliminarRol.setCaption("Eliminar");
		btnEliminarRol.setImmediate(true);
		btnEliminarRol.setWidth("-1px");
		btnEliminarRol.setHeight("-1px");
		pnlRolFila5.addComponent(btnEliminarRol);
		pnlRolFila5.setComponentAlignment(btnEliminarRol, new Alignment(20));
		
		return pnlRolFila5;
	}

	@AutoGenerated
	private HorizontalLayout buildPnlPestanias() {
		// common part: create layout
		pnlPestanias = new HorizontalLayout();
		pnlPestanias.setImmediate(false);
		pnlPestanias.setWidth("-1px");
		pnlPestanias.setHeight("-1px");
		pnlPestanias.setMargin(false);
		pnlPestanias.setSpacing(true);
		
		// tabSheet
		tabSheet = buildTabSheet();
		pnlPestanias.addComponent(tabSheet);
		
		return pnlPestanias;
	}

	@AutoGenerated
	private TabSheet buildTabSheet() {
		// common part: create layout
		tabSheet = new TabSheet();
		tabSheet.setImmediate(true);
		tabSheet.setWidth("-1px");
		tabSheet.setHeight("-1px");
		
		// panelConfigRolesMembresia
		panelConfigRolesMembresia = new MembresiasUI();
		panelConfigRolesMembresia.setImmediate(false);
		panelConfigRolesMembresia.setWidth("-1px");
		panelConfigRolesMembresia.setHeight("-1px");
		tabSheet.addTab(panelConfigRolesMembresia, "Membresí­as", null);
		
		return tabSheet;
	}

}
